package com.maple.retry.retrytask.enums;

import org.apache.commons.lang3.StringUtils;

/**
 * @author: maple
 * @version: RetryTaskStatusEnum.java, v 0.1 2020年12月01日 17:29 maple Exp $
 */
public enum RetryTaskStatusEnum {

    /**
     * 创建一个新的补偿任务,待执行
     */
    INIT("INIT", "任务初始化"),

    /**
     * 若任务执行成功,状态更新为SUCCESS;若执行失败,状态保持INIT,等待下次重试
     */
    SUCCESS("SUCCESS", "任务执行成功"),

    /**
     * 任务执行失败且超过最大重试次数,状态更新为FAILED
     */
    FAILED("FAILED", "超过最大重试次数"),

    /**
     * 任务终止,由业务方发起
     */
    ABORT("ABORT", "任务终止"),

    PROCESSING("PROCESSING", "PROCESSING");

    /**
     * 补偿任务状态code
     */
    private String code;

    /**
     * 补偿任务状态描述
     */
    private String desc;

    /**
     * @param code 状态码
     * @param desc 状态描述
     */
    private RetryTaskStatusEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    /**
     * 根据code返回对应枚举
     *
     * @param code 任务类型码
     * @return 返回对应枚举
     */
    public static RetryTaskStatusEnum getByCode(String code) {
        for (RetryTaskStatusEnum item : values()) {
            if (StringUtils.equals(item.getCode(), code)) {
                return item;
            }
        }
        return null;
    }

    /**
     * Getter method for property <tt>code</tt>.
     *
     * @return property value of code
     */
    public String getCode() {
        return code;
    }

    /**
     * Getter method for property <tt>desc</tt>.
     *
     * @return property value of desc
     */
    public String getDesc() {
        return desc;
    }
}
